// 日志 日志级别
// debug--输出的信息对调试很用
// info--强调应用程序的运行过程，就是输出提示信息
// warn--表明会出现潜在的错误事件，就是告警信息
// fatal--严重的错误事件会导致应用程序的退出
// debug<info<warn<fatal

import { isProd } from "configs/constants"
import log4js from "log4js"

const enum Levels {
    debug = 'debug',
    info = 'info',
    warn = 'warn',
    error = 'error',
    fatal = 'fatal'
}

log4js.configure({
    appenders: {
        console: {
            type: "console",   // 控制台输出
            layout: {
                // 开发环境下带颜色输出， 生产环境下用基本色
                type: isProd ? "basic": "coloured"
            }
        },
        info: {
            type: 'file',
            filename: 'logs/info.log'
        },
        error: {
            type: 'dateFile', // 日期文件
            filename: 'logs/error',
            pattern: 'yyyy-MM-dd.log',
            maxLogSize: 1024*1000*100, // 文件最大存储
            backups: 100 // 日志文件的备份数量
        },
        debug: {
            type: 'dateFile',
            filename: 'logs/debug',
            pattern: "yyyy-MM-dd.log"
        }
    },
    categories: {
        default: {appenders: ['console'], level: Levels.debug}, // 默认日志级别
        info: {appenders: ['info', 'console'], level: Levels.info}, // 信息打印
        error: {appenders: ['error', 'console'], level: Levels.error}, // 错误日志
        debug: {appenders: ['debug', 'console'], level: Levels.debug}
    }
})

// 日志对象
class Log {
    // debug的日志记录方法
    debug(content: any, ...rest: any[]) {
        const logger = log4js.getLogger(Levels.debug);
        logger.level = Levels.debug
        logger.debug(content, rest);
    }
    info(content: any, ...rest: any[]) {
        const logger = log4js.getLogger(Levels.info);
        logger.level = Levels.info;
        logger.info(content, rest)
    }
}
export default new Log()